package com.tedu.review.day02;

/**
 * super 关键字-- ---一定存在继承
 * super 代表父类的引用 ,可以通过引用调用父类的属性以及方法
 * 语法:子类出现  super.属性
 *              super.方法
 *              super()调取父类的构造器
 *this调用当前对象的引用 针对类    不针对继承
 * 语法:任意类   this.属性   用法: 方法中 构造器中出现其中肯定有参数
 *             区分参数与属性名相同的情况:
 *             针对赋值   this.name=name
 *                       类中属性=传入参数
 *             当前类的属性重新赋值
 *     this.方法    用法:调用本类的其他方法
 */
class Animal{
    String name="动物";
    public void say(){
        System.out.println(name+"语言");
    }
    //构造器:无参数---运行有参


    public Animal() {
        this("1");   //无参构造器调用有参构造器
        System.out.println("我是父类构造器");
    }

    public Animal(String name) {
        this.name = name ;
        System.out.println("我是父类的构造器有参");
    }
}
class Dog extends Animal{
    //针对无参构造器,有参构造器
    public Dog() {
        super("有参"); //super只能出现在构造器的第一行
        System.out.println("Dog....");
    }

    public void say(){
        System.out.println("汪汪" );
        this.sayTest(); //当前类的其他方法
    }
    public void sayTest(){
        //测试:调取父类的属性，方法，构造器
        System.out.println("测试---");
     //   super.say();
     //   System.out.println(super.name+":哺乳动物");
    }
}

public class Super关键字的使用 {
    public static void main(String[] args) {
     //   Dog dog=new Dog(); //1.调用构造器 先super调用父亲的有参构造器
                           //2.然后调用 子类的无参构造器内容
     //   dog.sayTest(); //3.执行方法:发现  super调用父类的方法
                       //4.然后调用子类的方法,发现super调用父类的属性
                       //5.最后执行子类的输出语句
      //  dog.say();
        //测试:Animal动物类   this()  调用本来其他构造器
        Animal a=new Animal(); //调用构造器
    }
}
/**
 *           笔试题:this与super有什么区别?
 *           this 调用本类的属性或者方法以及构造器
 *           super 调用父类的属性或者方法以及构造器
 *           this(参数) 可调用本类其他构造器   在构造器的首行
 *           super(参数) 可调用父类的其他构造器  在构造器首行
 *                       有继承关系  在子类构造器中默认存在 super()
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
